// 继承
// 参考 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain
// http://es6.ruanyifeng.com/#docs/class-extends
// function的继承方式
let o = {
    q: 1,
    w: function (){
        return this.q * 2
    }
}
o.q // 1
o.w() // 2

// 用object.create的方法来继承
let a = Object.create(o)
// 这会创建出一个空对象a，在对象的原型链__proto__上，会有父类o的内容
a.q // 1
a.w() // 2

a.q = 2
a.q // 2
a.w() // 4


// 采用class的方式来实现继承
// 使用extends关键字
class Point {
    constructor(x, y){
        this.x = x,
        this.y = y
    }
    toString() {
        return '(' + this.x + ' ' + this.y + ')'
    }
}

class ColorPoint extends Point {
    // 因为继承的子类要跟父类统一构造函数？ 所以必须用super方法获取到父类的构造函数中的this对象，不然在新建实例时会报错
    constructor(x, y, color) {
        super(x, y); // 调用父类的constructor(x, y)
        this.color = color;
    }
    
    toString() {
        return this.color + ' ' + super.toString(); // 调用父类的toString()
    }
}

let cp = new ColorPoint('1', '2', 'green')